耶~終於到我們介紹的最後一篇 Layer 啦~ 
你一定看過這種類型的地圖:

圖片來源:https://www.soft4fun.net/tech/news/e-invoice-heatmap.htm
這張是根據電子發票來推斷台灣消費熱區的地圖,我們可以用顏色來區分密集度,進而能從視覺化上快速找到消費高的地區是哪裡,這就是 Heatmap 的用途!
知道用途後,我們先看一些創建 Heatmap 的重要屬性,最後來做一張台灣車禍地圖吧~
範例我參考官網給的程式碼,因為主要是要介紹 Heatmap 所以有做一點簡化,想看更詳細的使用可以看一下官網範例!
heatmap-weight:每個點對 Heatmap 的權重,默認值為 1heatmap-intensity:Heatmap 的強度heatmap-color:Heatmap 的顏色漸變,從最小值到最大值heatmap-radius:每個點的半徑 (pixel 為單位)heatmap-opacity:Heatmap 圖層的不透明度資料來源我是從政府開放平台拿的,怕資料太龐大不好實作所以只有拿 A1 部分的資料 (提供造成人員當場或24小時內死亡之交通事故資料)。開放平台所提供的資料檔案格式是 Json,所以我們要先來進行轉檔,我們之前有寫過轉檔的程式碼,不知道的可以看一下這裡~
轉成 GeoJSON 檔後,我們就可以把資料加到地圖了:
import traffic from './traffic.json'
...
map.addSource('traffic', {
  'type': 'geojson',
  'data': traffic
});
資料名稱為 traffic~
接下來利用 addLayer 創建 Heapmap 圖層,並且透過我們剛剛介紹的屬性做外觀上的微調:
map.addLayer({
  'id': 'traffic-heat',
  'type': 'heatmap',
  'source': 'traffic',
  'maxzoom': 15,
  'paint': {
    'heatmap-color': [
      'interpolate',
      ['linear'],
      ['heatmap-density'],
      0,
      'rgba(236,222,239,0)',
      0.2,
      'rgb(208,209,230)',
      0.4,
      'rgb(166,189,219)',
      0.6,
      'rgb(103,169,207)',
      0.8,
      'rgb(28,144,153)'
    ],
    'heatmap-radius': {
      'stops': [
        [11, 15],
        [15, 20]
      ]
    },
    'heatmap-opacity': {
      'default': 1,
      'stops': [
        [14, 1],
        [15, 0]
      ]
    }
  }
});
heatmap-color:各階段輸出所規定的對應顏色
interpolate:制定不同階段下的不同輸出結果,產生連續、平滑的效果['linear']:在剛好小於和剛好大於輸入的停止點之間進行線性插值['heatmap-density']:回傳 Heatmap 中像素的密度估計heatmap-radius:隨著縮放級別增加,半徑增加
stops:
heatmap-opacity:縮放級別在 14 到 15 的過渡期間,透明度提升 (1 -> 0)地圖輸出:

太密集了所以我有先放大再截圖~ (台灣真的太小ㄌ)
Layer 的部分就先告一段落了~(撒花)
希望這一系列的文章到目前有幫助到你!(⁎⁍̴̛ᴗ⁍̴̛⁎)
突然發現 Layer 我竟然寫了快一個禮拜,難怪覺得這禮拜怎麼過得那麼久 ... 